package cn.kgc.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Timestamp;
import java.util.Date;

//使用JDBC实现课工场新闻数据的增删改查
public class NewsDao2 {
	Connection connection = null;
	PreparedStatement pstmt = null;
	ResultSet rs = null;
	
	//获取数据库的连接（提取重复的代码，减少代码的冗余）
	public void getConnection(){
		//加载不同数据库厂商提供的驱动
		try {
			Class.forName("com.mysql.jdbc.Driver");
			//查询来说
			//（1）铺路（获取连接connection）
			String url = "jdbc:mysql://localhost:3306/kgcnews";
			connection = DriverManager.getConnection(url, "root", "1234");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} 
	}
	
	//增加新闻信息
	public void addNews(int id,int categoryid,String title,String summary,String content,String author,Date createDate){
		try {
			this.getConnection();
			//（2）下圣旨（sql命令）
			String sql = "INSERT INTO news_detail(id,categoryid,title,summary,content,author,createDate) VALUES(?,?,?,?,?,?,?);";
			//（3）找一个小太监帮皇上执行圣旨（statement/PreparedStatement）
			pstmt = connection.prepareStatement(sql);
			//在sql语句的第1个问号的位置填充title，set后的类型根据实际字段的类型
			pstmt.setInt(1, id);
			pstmt.setInt(2, categoryid);
			pstmt.setString(3, summary);
			pstmt.setString(4, title);
			pstmt.setString(5, content);
			pstmt.setString(6, author);
			pstmt.setTimestamp(7, new Timestamp(createDate.getTime()));
			
			int i = pstmt.executeUpdate();	
			if(i>0){
				System.out.println("插入新闻成功！");
			}
		}catch (SQLException e) {
			e.printStackTrace();
		}finally{			
			try {
				//（5）关闭城门（释放资源）
				pstmt.close();
				connection.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	
	//删除特定新闻的方法
	public void deleteNews(int id){
		try {
			this.getConnection();
			//（2）下圣旨（sql命令）
			String sql = "DELETE FROM news_detail WHERE id=?";
			//（3）找一个小太监帮皇上执行圣旨（statement/PreparedStatement）
			pstmt = connection.prepareStatement(sql);
			//在sql语句的第1个问号的位置填充id，set后的类型根据实际字段的类型
			pstmt.setInt(1, id);
			
			int i = pstmt.executeUpdate();	
			if(i>0){
				System.out.println("删除新闻成功！");
			}
		}catch (SQLException e) {
			e.printStackTrace();
		}finally{			
			try {
				//（5）关闭城门（释放资源）
				pstmt.close();
				connection.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	
	//修改特定新闻信息的方法
	public void updateNews(int id,String title){
		try {
			this.getConnection();
			//（2）下圣旨（sql命令）
			String sql = "UPDATE news_detail SET title=? WHERE id=?";
			//（3）找一个小太监帮皇上执行圣旨（statement/PreparedStatement）
			pstmt = connection.prepareStatement(sql);
			//在sql语句的第1个问号的位置填充id，set后的类型根据实际字段的类型
			pstmt.setString(1, title);
			pstmt.setInt(2, id);
			
			int i = pstmt.executeUpdate();	
			if(i>0){
				System.out.println("修改新闻成功！");
			}
		}catch (SQLException e) {
			e.printStackTrace();
		}finally{			
			try {
				//（5）关闭城门（释放资源）
				pstmt.close();
				connection.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	
	//查询全部新闻信息
	public void getNewsByList(){
		try {
			this.getConnection();
			//（2）下圣旨（sql命令）
			String sql = "SELECT id,categoryid,title,summary,content,author,createDate FROM news_detail";
			System.out.println(sql);
			//（3）找一个小太监帮皇上执行圣旨（statement/PreparedStatement）
			pstmt = connection.prepareStatement(sql);
			//（4）拉回西瓜（返回结果集ResultSet）
			rs = pstmt.executeQuery();
			while(rs.next()){
				/*int id = rs.getInt(1);
				String title = rs.getString(2);*/
				int newsId = rs.getInt("id");
				int categoryId = rs.getInt("categoryid");
				String newsTitle = rs.getString("title");
				String summary = rs.getString("summary");
				String content = rs.getString("content");
				String author = rs.getString("author");
				Timestamp createdate = rs.getTimestamp("createDate");
				System.out.println(newsId+"\t"+categoryId+"\t"+newsTitle+"\t"+summary+"\t"+content+"\t"+author+"\t"+createdate);
			}			
		}catch (SQLException e) {
			e.printStackTrace();
		}finally{			
			try {
				//（5）关闭城门（释放资源）
				rs.close();
				pstmt.close();
				connection.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		 
	}
	
	
	//查询特定标题的新闻信息
	public void getNewsByTitle(String title){
		try {
			this.getConnection();
			//（2）下圣旨（sql命令）
			String sql = "SELECT id,title FROM news_detail where title=?";
			System.out.println(sql);
			//（3）找一个小太监帮皇上执行圣旨（statement/PreparedStatement）
			pstmt = connection.prepareStatement(sql);
			//在sql语句的第1个问号的位置填充title，set后的类型根据实际字段的类型
			pstmt.setString(1, title);
			//（4）拉回西瓜（返回结果集ResultSet）
			rs = pstmt.executeQuery();
			while(rs.next()){
				/*int id = rs.getInt(1);
				String title = rs.getString(2);*/
				int id = rs.getInt("id");
				String newsTitle = rs.getString("title");
				System.out.println(id+"\t"+newsTitle);
			}			
		}catch (SQLException e) {
			e.printStackTrace();
		}finally{			
			try {
				//（5）关闭城门（释放资源）
				rs.close();
				pstmt.close();
				connection.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		 
	}
	
	public static void main(String[] args) {
		NewsDao2 dao = new NewsDao2();
		dao.getNewsByTitle("Java Web开课啦"); 
//		dao.getNewsByTitle("Java Web开课啦' or '1'='1");
		
//		dao.addNews(4, 1, "test", "test", "test", "test", new Date());
//		dao.updateNews(3, "newTitle");
		dao.getNewsByList();
	}
}
